package ModelLayer;

import java.util.ArrayList;

/**
 * 
 * @author (GP3 Product Solutions) 
 * @version (05-06-2011 JSM: Oprettelse af klassen)
 */
public class VareBeskrivelse
{
    // instans-variabler
    private String beskrivelse;
    private int vareId;
    private String navn;
    private double pris;
    private String lokation;
    private int minLager;
    private int maxLager;
    private int genbestilling;
    private double tilbudsPris;
    private String leverandoerNavn;
    private Leverandoer leverandoer;
    private ArrayList<Vare> varer;

    /**
     * Konstruktør for objekter af klassen ProduktBeskrivelse
     * @param beskrivelse Beskrivelse af varen
     * @param vareId Varens identifikationsnummer (unik)
     * @param navn Varens navn
     * @param pris Varens pris
     * @param lokation Varens placering på lageret
     */
    public VareBeskrivelse(String beskrivelse, String leverandoerNavn, int vareId, String navn, double pris, String lokation, double tilbudsPris)
    {
        // initialisering af instans variabler
        this.beskrivelse = beskrivelse;
        this.leverandoerNavn = leverandoerNavn;
        this.vareId = vareId;
        this.navn = navn;
        this.pris = pris;
        this.lokation = lokation;
        this.tilbudsPris = tilbudsPris;
        
        varer = new ArrayList<Vare>();
    }
    
    public VareBeskrivelse()
    {
        
    }
    
    /**
     * Metoden angiver en vares beskrivelse
     * @param beskrivelse Varens beskrivelse
     */
    public void angivBeskrivelse(String beskrivelse)
    {
        this.beskrivelse = beskrivelse;
    }
    
    /**
     * Metoden henter en vares beskrivelse
     * @return String Varens beskrivelse
     */
    public String hentBeskrivelse()
    {
        return beskrivelse;
    }
    
    /**
     * Metoden angiver en vares id
     * @param vareId Varens id
     */
    public void angivVareId(int vareId)
    {
        this.vareId = vareId;
    }
    
    /**
     * Metoden henter en vares id
     * @return int Varens id
     */
    public int hentVareId()
    {
        return vareId;
    }
    
    /**
     * Metoden angiver en vares navn
     * @param navn Varens navn
     */
    public void angivNavn(String navn)
    {
        this.navn = navn;
    }
    
    /**
     * Metoden henter en vares navn
     * @return String Varens navn
     */
    public String hentNavn()
    {
        return navn;
    }
    
    /**
     * Metoden angiver en vares pris
     * @param pris Varens pris
     */
    public void angivPris(double pris)
    {
        this.pris = pris;
    }
    
    /**
     * Metoden henter en vares pris
     * @return double Varens pris
     */
    public double hentPris()
    {
        return pris;
    }
    
    /**
     * Metoden angiver en vares lokation på lageret
     * @param lokation Varens lokation på lageret
     */
    public void angivLokation(String lokation)
    {
        this.lokation = lokation;
    }
    
    /**
     * Metoden henter en vares lokation på lageret
     * @return String Varens lokation på lageret
     */
    public String hentLokation()
    {
        return lokation;
    }
    
    /**
     * Metoden angiver en vares minimum på lageret
     * @param minLager Varens minimum på lageret
     */
    public void angivMinLager(int minLager)
    {
        this.minLager = minLager;
    }
    
    /**
     * Metoden henter en vares minimum på lageret
     * @return int Varens minimum på lageret
     */
    public int hentMinLager()
    {
        return minLager;
    }
    
    /**
     * Metoden angiver en vares maksimum på lageret
     * @param maxLager Varens maksimum på lageret
     */
    public void angivMaxLager(int maxLager)
    {
        this.maxLager = maxLager;
    }
    
    /**
     * Metoden henter en vares maksimum på lageret
     * @return int Varens maksimum på lageret
     */
    public int hentMaxLager()
    {
        return maxLager;
    }
    
    /**
     * Metoden angiver en vares genbestillingsmængde
     * @param gnMaengde Varens genbestillingsmængde
     */
    public void angivGenbestillingsMaengde(int gnMaengde)
    {
        genbestilling = gnMaengde;
    }
    
    /**
     * Metoden henter en vares genbestillingsmængde
     * @return int Varens genbestillingsmængde
     */
    public int hentGenbestillingsMaengde()
    {
        return genbestilling;
    }
    
    /**
     * Metoden angiver en vares tilbudspris
     * @param tilbudsPris Varens tilbudspris
     */
    public void angivTilbudsPris(double tilbudsPris)
    {
        this.tilbudsPris = tilbudsPris;
    }
    
    /**
     * Metoden henter en vares tilbudspris
     * @return double Varens tilbudspris
     */
    public double hentTilbudsPris()
    {
        return tilbudsPris;
    }
    
    /**
     * Metoden angiver en leverandørs navn
     * @param navn Leverandørens navn
     */
    public void angivLeverandoerNavn(String navn)
    {
        leverandoerNavn = navn;
    }
     
    /**
     * Metoden henter en leverandørs navn
     * @return String Leverandørens navn
     */
    public String hentLeverandoerNavn()
    {
        return leverandoerNavn;
    }
    
    /**
     * Metoden henter størrelse på det array, der
     * indeholder varebeskrivelser
     * @return int Array-størrelse
     */
    public int arrayStoerrelse()
    {
        return varer.size();
    }
    
    /**
     * Tilføjer en vare til varebeskrivelsen.
     */
    public void tilfoejVare(int vareId)
    {
        Vare vare = null;
        
        if(vareId <= 100) //alle vareId'er < 100 er værktøj (eks. vareId 1 = Hammer, 2 = Skruetrækker)
        {
            vare = new Vaerktoej();
        }
        else if(vareId > 100 && vareId <= 200) //alle vareId'er > 100 og <= 200 er hvidevarer
        {
            vare = new Hvidevarer();
        }
        varer.add(vare);
    }
    
    /**
     * Metoden tilføjer en leverandør til varebeskrivelsen
     * @param leverandoer Et objekt af typen leverandoer
     */
    public void tilfoejLeverandoer(Leverandoer leverandoer)
    {
        this.leverandoer = leverandoer;
    }
   
    /**
     * Metode der opdaterer (nedskriver) en vares antal
     * @param antal Det antal en vare skal nedskrives med
     * @return 
     */
    public String opdaterAntal(int antal)
    {
        int index = 0;
        String besked = "";
        
        while(index < antal)
        {
            varer.remove(index);
            index++;
        }
//        if(varer.size() < minLager)
//        {
//            return besked = "Der skal bestilles " + genbestilling + " nye " + navn + " hjem";
//        }
        return besked;
    }
    
    /**
     * Metode der henter information om en vare
     * @return String Varens info
     */
    @Override
    public String toString()
    {
        String info = "Vareid: " + hentVareId() + " navn: " + hentNavn() + "\n Beskrivelse: " + hentBeskrivelse() + "\n Pris: " + hentPris() + "\n Lokation: " + hentLokation() + "\n Leverandør: " + hentLeverandoerNavn() + "\n Antal på lager: " + varer.size();
        return info;
    }
}

